nombre_de_la_funcion <- function(arg1, arg2, ...) {
# Código que realiza alguna tarea o calculo
return(resultado)
}Clase 6 / Práctica 2
Escritura Funciones:
A los efectos de demostrar para qué nos pueden servir las funciones, trabajaremos con ejemplos donde dada una entrada de datos, estos son procesados internamente dentro de la función y luego se genera una salida (de datos ).
datos entrada ▶️ cálculos dentro de la función ▶️ salida de datos
La sintáxis y los componentes básicos de una función en R son los siguientes:
nombre_de_la_funcion: Es el nombre que le das a tu función y por el cual la llamarás cuando necesites usarla.function(): Es el comando en R para definir una nueva función. Dentro de los paréntesis () puedes especificar los argumentos o variables que necesitas para que la función pueda realizar el proceso que estás definiendo.arg1,arg2,….,argn: (también conocidos como parámetros) son valores de entrada que se pasan a la función para ser utilizados dentro del código.return(): Finalmente, el valor resultante de tu función puede ser devuelto usando el comando return. Si no usas return(), la función devolverá automáticamente el último valor calculado. El uso delreturn()será explicado con mayor detalle en las clases.El código real de tu función se encuentra dentro de las llaves {}. Aquí es donde realizas todos los cálculos y acciones que tu función necesita hacer.
Es importante usar nombres descriptivos y fáciles de entender para tus funciones. Esto hace que sea más fácil entender qué hace cada una cuando las leas o las uses en el futuro.
Al igual que en las matemáticas, los argumentos permiten que una misma función realice diferentes tareas dependiendo de los datos con los que es llamada, no obstante lo antes indicado es ilustrativo, ya que la definición de las funciones dentro de las matemáticas tiene diferencias considerables a lo que representa una función dentro de la computación.
Con respecto a los argumentos, cada uno de ellos puede tener un valor predeterminado si se especifica al definir la función. Si al llamar una función no especifico el valor del argumento que definí como predeterminado, R usará el valor por defecto.
Aquí tienes un ejemplo sencillo:
# Definimos una función llamada 'suma' que recibe dos argumentos: 'numero1' y 'numero2'
suma <- function(numero1, numero2 = 0) {
# Realizamos la suma de los dos números
resultado <- numero1 + numero2
# Devolvemos el resultado
return(resultado)
}En este ejemplo:
numero1es un argumento requerido.numero2es un argumento opcional, que tiene un valor predeterminado de0. Si no se proporciona un valor paranumero2, R utilizará0automáticamente.
Para llamar a esta función:
# Llamamos a la función 'suma' con dos argumentos
resultado1 <- suma(5, 3)
print(resultado1)
# Devolverá: [1] 8
# Llamamos a la función 'suma' con solo un argumento (se usará el valor predeterminado de 'numero2')
resultado2 <- suma(5)
print(resultado2) # Devolverá: [1] 5¿Por qué escribimos las funciones?
La necesidad de crear una función viene dada en que tenemos un procesamiento, por ejemplo de datos, que es necesario ejecutar varias veces en un script que estamos creando y a los fines de no replicar múltiples veces el mismo procedimiento, preferimos crear una función donde fácilmente podamos replicar la cadena de pasos que estamos ejecutando.
Supongamos que tenemos dentro de un reporte que estamos creando, la necesidad de calcular varias veces las variaciones porcentuales que presenta la inflación de distintos períodos. Para esto, en vez de realizar muchas veces los cálculos que permiten determinar cada una de las variaciones presentes, preferimos crear una función que tome de entrada como argumentos los datos del período t+1 y los del período t y dentro de ella hacemos los cálculos para generar la salida deseada.
Otra necesidad que plantea que definamos nuestras propias funciones, viene dado por lo que se conversó anteriormente en clase al hacer la analogía del autobús que cubre rutas generales de transporte y del carro propio que nos puede llevar de forma más directa a donde necesitemos trasladarnos, siendo la escritura de nuestras funciones el equivalente a disponer de un carro.
Contar con una función adaptada a nuestros requerimientos nos ayudará a ser más eficientes a la hora de procesar los datos con los que estemos trabajando. Es importante destacar que al escribir nuestra propia función, también podemos, y así en general lo haremos, usar funciones que vienen predifinidas en RBase u otras que pertenezcan a paquetes que carguemos en memoria. Siempre que se pueda, usaremos códigos ya escritos por otras personas que han enfrentado problemas similares a los que son nos presentan.
Ejercicios Funciones
1) completar los elementos faltantes para que la función se pueda ejecutar. NOTA: sino los completa no podrá ejecutar el chunk y le dará un mensaje de error
## función
calculo_inflacion <- function(precios_anterior, precios_actual)
# Calculamos la inflación para cada artículo
inflacion <- ((precios_actual / precios_anterior) - 1) * 100
# Retornamos el valor
return(inflacion
}# Ejemplo de uso
# Si la función definida en el chunk anterior no se completó correctamente no se podrá ejecutar ninguno de los chunks siguientes
calculo_inflacion(10, 14)
calculo_inflacion(12, 9)Los argumentos que se le pasan a una función pueden ser posicionales sin mencionar explicitamente el nombre del argumento
calculo_inflacion(10 14)Igualmente se puede mencionar explicitamente el nombre del argumento
calculo_inflacion(precios_anterior =10,
precios_actual 14)o dados con el nombre sin tomar en cuenta la posición
calculo_inflacion(precios_actual =20,
precios_anterior= 212) Completar los elmentos faltantes para realizar la definición de una función que permite realizar el cálculo del PIB percápita dado el PIB y el total de habitantes de un país.
calcular_pib_per_capita <- function(pib_total,) {
# Calculamos el PIB per cápita
pib_per_capita <- / poblacion
return(pib_per_capita)
}# Ejemplo de uso
pib_total <- 123000043 # PIB total en millones de dólares
poblacion <- 24531 # Población en millones
calcular_pib_per_capita(pib_total, poblacion)
print(pib_per_capita_resultado) # Imprimir el resultado